home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 34.zip / BS1 part 34 / GFA basic training.adf / Grafik / 3.2.LST < prev    next >
File List  |  1989-06-01  |  13KB  |  526 lines

  1. @main
  2. '
  3. > PROCEDURE main
  4.   OPENS 1,0,0,640,256,4,32768
  5.   OPENW #1,0,0,640,256,&H8,&H1000,1
  6.   ze&=5
  7.   sp&=5
  8.   DIM daten(ze&,sp&),darstellung$(6)
  9.   FOR i|=0 TO ze&
  10.     FOR j|=0 TO sp&
  11.       daten(i|,j|)=RAND(50)-RAND(50)
  12.     NEXT j|
  13.   NEXT i|
  14.   '
  15.   RESTORE art
  16.   FOR i|=1 TO 6
  17.     READ darstellung$(i|)
  18.   NEXT i|
  19.   '
  20.   REPEAT
  21.     @auswahl_box(1,6,darstellung$(),art!())
  22.     i|=1
  23.     WHILE art!(i|) AND i|<6
  24.       INC i|
  25.     WEND
  26.     ERASE art!()
  27.     @daten(i|)
  28.   UNTIL i|=6
  29.   CLOSEW #1
  30.   CLOSES 1
  31.   '
  32.   art:
  33.   DATA 3D-Histogramm,Fläche,Schichtogramm,Kurven,Histogramm,Ende
  34. RETURN
  35. > PROCEDURE daten(art|)
  36.   SELECT art|
  37.   CASE 1 ! 3D-Histogramm
  38.     '
  39.     @drei_dee_histo(daten())
  40.     '
  41.   CASE 2 ! Fläche
  42.     @flÄche(daten())
  43.     '
  44.   CASE 3 ! Schichtogramm
  45.     '
  46.     @schichto(daten())
  47.     '
  48.   CASE 4 ! Kurven
  49.     '
  50.     @kurven(daten())
  51.     '
  52.   CASE 5 ! Histogramm
  53.     '
  54.     @histo(daten())
  55.     '
  56.   ENDSELECT
  57.   REPEAT
  58.   UNTIL MOUSEK OR INKEY$<>""
  59.   CLS
  60. RETURN
  61. '
  62. > PROCEDURE drei_dee_histo(VAR array())
  63.   DIM f_x%(5),f_y%(5)
  64.   d_x&=80
  65.   d_y&=220
  66.   winkel|=80
  67.   knick|=20
  68.   p|=0
  69.   @min_max(0,array())
  70.   @rahmen1(min,max)
  71.   scale=10/((max-min)/10)
  72.   '
  73.   FOR z&=0 TO zeilen&
  74.     @farbe(z&+2)
  75.     DRAW "sy0"
  76.     DRAW "pu ma",d_x&,d_y&,"tt",winkel|,"fd 250 bk",SUCC(z&)*(250/SUCC(zeilen&))
  77.     IF min<0
  78.       DRAW "sy",scale
  79.       DRAW "tt 0 fd",ABS(min)
  80.     ENDIF
  81.     FOR s&=0 TO spalten&
  82.       '
  83.       DEFFILL z&+2,1
  84.       @balken(scale,220/SUCC(spalten&),array(z&,s&),220/SUCC(zeilen&))
  85.       DRAW "sy0 pu tt",winkel|+knick|,"fd",250/SUCC(spalten&)
  86.       '
  87.     NEXT s&
  88.   NEXT z&
  89.   ERASE f_x%(),f_y%()
  90. RETURN
  91. > PROCEDURE histo(VAR array())
  92.   '
  93.   @min_max(0,array())
  94.   @rahmen2("Histogramm",min,max)
  95.   DEFFN h_y(wert)=null&-(wert/(max-min))*160
  96.   '
  97.   FOR z&=0 TO zeilen&
  98.     '
  99.     p|=0
  100.     b_b&=abs_abs&/(spalten&+2)
  101.     hx_ko&=a_null&+z&*abs_abs&+b_b&/2
  102.     FOR s&=0 TO spalten&
  103.       '
  104.       @farbe(SUCC(s&))
  105.       COLOR SUCC(s&)
  106.       PBOX hx_ko&,null&,hx_ko&+b_b&,FN h_y(array(z&,s&))
  107.       ADD hx_ko&,b_b&
  108.       '
  109.     NEXT s&
  110.     '
  111.   NEXT z&
  112. RETURN
  113. > PROCEDURE kurven(VAR array())
  114.   '
  115.   @min_max(0,array())
  116.   @rahmen2("Kurven-Diagramm",min,max)
  117.   DEFFN k_y(wert)=null&-(wert/(max-min))*160
  118.   p|=0
  119.   FOR z&=0 TO zeilen&
  120.     '
  121.     COLOR SUCC(z&)
  122.     @farbe(SUCC(z&))
  123.     PLOT a_null&+abs_abs&/2,FN k_y(array(z&,0))
  124.     FOR s&=1 TO spalten&
  125.       DRAW  TO a_null&+abs_abs&/2+s&*abs_abs&,FN k_y(array(z&,s&))
  126.     NEXT s&
  127.     '
  128.   NEXT z&
  129.   '
  130. RETURN
  131. > PROCEDURE flÄche(VAR array())
  132.   spalten&=PRED(LPEEK(LPEEK(ARRPTR(daten()))))
  133.   zeilen&=PRED(LPEEK(LPEEK(ARRPTR(daten()))+4))
  134.   DIM flÄche(SUCC(spalten&))
  135.   FOR z&=0 TO zeilen&
  136.     FOR s&=0 TO spalten&
  137.       ADD flÄche(s&),array(z&,s&)
  138.       min=MIN(min,flÄche(s&))
  139.       max=MAX(max,flÄche(s&))
  140.     NEXT s&
  141.   NEXT z&
  142.   DEC spalten&
  143.   @rahmen2("Flächen-Diagramm",min,max)
  144.   INC spalten&
  145.   DEFFN y_koord(wert)=o_null&-((wert-min)/(max-min))*160
  146.   DIM f_x%(spalten&+2),f_y%(spalten&+2)
  147.   f_x%(spalten&+1)=PRED(a_null&+breite&-(a_null&-x%))
  148.   f_y%(spalten&+1)=PRED(null&)
  149.   f_x%(spalten&+2)=SUCC(a_null&)
  150.   f_y%(spalten&+2)=PRED(null&)
  151.   p|=0
  152.   FOR z&=zeilen& DOWNTO 0
  153.     x_koord&=a_null&
  154.     PLOT x_koord&,FN y_koord(flÄche(0))
  155.     f_x%(0)=SUCC(x_koord&)
  156.     f_y%(0)=FN y_koord(flÄche(0))
  157.     FOR s&=1 TO spalten&
  158.       ADD x_koord&,abs_abs&
  159.       DRAW  TO x_koord&,FN y_koord(flÄche(s&))
  160.       f_x%(s&)=x_koord&
  161.       f_y%(s&)=FN y_koord(flÄche(s&))
  162.       SUB flÄche(s&),array(z&,s&)
  163.     NEXT s&
  164.     DEC f_x%(spalten&)
  165.     @farbe(SUCC(zeilen&)-z&)
  166.     DEFFILL SUCC(z&),1
  167.     POLYFILL spalten&+3,f_x%(),f_y%()
  168.     SUB flÄche(0),array(z&,0)
  169.     PAUSE 5
  170.   NEXT z&
  171.   ERASE flÄche(),f_x%(),f_y%()
  172. RETURN
  173. > PROCEDURE schichto(VAR array())
  174.   spalten&=PRED(LPEEK(LPEEK(ARRPTR(daten()))))
  175.   zeilen&=PRED(LPEEK(LPEEK(ARRPTR(daten()))+4))
  176.   '
  177.   DIM s_bar(SUCC(spalten&))
  178.   FOR z&=0 TO zeilen&
  179.     FOR s&=0 TO spalten&
  180.       ADD s_bar(s&),array(z&,s&)
  181.       min=MIN(min,s_bar(s&))
  182.       max=MAX(max,s_bar(s&))
  183.     NEXT s&
  184.   NEXT z&
  185.   @rahmen2("Stack Bar",min,max)
  186.   '
  187.   DEFFN lÄnge(wert)=(wert/(max-min))*160
  188.   BOUNDARY 1
  189.   FOR s&=0 TO spalten&
  190.     '
  191.     o_null&=null&
  192.     p|=0
  193.     FOR z&=0 TO zeilen&
  194.       @farbe(z&)
  195.       DEFFILL z&,1
  196.       PBOX SUCC(a_null&+s&*abs_abs&),o_null&-FN lÄnge(array(z&,s&)),PRED(a_null&+abs_abs&+s&*abs_abs&),o_null&
  197.       SUB o_null&,FN lÄnge(array(z&,s&))
  198.     NEXT z&
  199.     '
  200.   NEXT s&
  201.   ERASE s_bar()
  202. RETURN
  203. '
  204. > PROCEDURE rahmen1(min&,max&)
  205.   DRAW "pd sx0 sy0 ma",d_x&,d_y&
  206.   DRAW "tt 000 fd 100"
  207.   DRAW "tt",winkel|,"fd 250"
  208.   DRAW "tt",winkel|+knick|,"fd 250"
  209.   DRAW "tt 180 fd 100"
  210.   DRAW "tt",winkel|+knick|+180,"fd 250"
  211.   DRAW "tt 000 fd 100"
  212.   DRAW "tt 180 fd 100"
  213.   DRAW "tt",winkel|+180,"fd 250"
  214.   '
  215.   ordinate$=SPACE$(9)
  216.   FOR i|=0 TO 9
  217.     DRAW "tt 270 fd 10 bk 10"
  218.     RSET ordinate$=STR$(min&+(max&-min&)/10*i|,7,1)
  219.     TEXT 3,DRAW(1)+3,ordinate$
  220.     IF NOT ODD(i|)
  221.       DRAW "tt",winkel|,"fd 250 tt",winkel|+knick|,"fd 250 bk 250 tt",winkel|+180,"fd 250"
  222.     ENDIF
  223.     DRAW "tt 0 fd 10"
  224.   NEXT i|
  225.   DRAW "tt 270 fd 10 tt 90 fd 10"
  226.   RSET ordinate$=STR$(min&+(max&-min&)/10*i|,7,1)
  227.   TEXT 3,DRAW(1)+3,ordinate$
  228. RETURN
  229. > PROCEDURE rahmen2(titel$,min,max)
  230.   hÖhe&=180
  231.   breite&=500
  232.   x%=70
  233.   y&=35
  234.   '
  235.   BOX x%,y&-12,x%+breite&,y&
  236.   TEXT (x%+breite&/2)-LEN(titel$)*4,y&-3,titel$
  237.   BOX x%,y&,x%+breite&,y&+hÖhe&
  238.   ordinate$=SPACE$(9)
  239.   o_null&=y&+165
  240.   a_null&=x%+80
  241.   '
  242.   LINE a_null&,y&+5,a_null&,o_null&
  243.   FOR i|=10 DOWNTO 0
  244.     RSET ordinate$=STR$(min+(max-min)/10*(10-i|),5,1)
  245.     TEXT x%+3,y&+8+i|*16,ordinate$
  246.     LINE a_null&-5,y&+5+i|*16,a_null&,y&+5+i|*16
  247.   NEXT i|
  248.   '
  249.   null&=o_null&-((MAX(min,0)-min)/(max-min))*160
  250.   LINE a_null&,null&,a_null&+breite&-(a_null&-x%),null&
  251.   abs_abs&=(breite&-(a_null&-x%))/SUCC(spalten&)
  252.   FOR i%=a_null& TO a_null&+breite&-(a_null&-x%)-10 STEP abs_abs&
  253.     LINE i%,null&-1,i%,null&+1
  254.   NEXT i%
  255. RETURN
  256. > PROCEDURE min_max(base|,VAR daten())
  257.   deskriptor%=ARRPTR(daten())
  258.   adresse%=LPEEK(deskriptor%)
  259.   dim|=DPEEK(deskriptor%+4)
  260.   max=-10^38
  261.   min=ABS(max)
  262.   '
  263.   SELECT dim|
  264.     '
  265.   CASE 1 ! 1-dimensionales Array
  266.     '
  267.     bis&=LPEEK(adresse%)+PRED(base|)
  268.     FOR i&=base| TO bis&
  269.       max=MAX(max,daten(i&))
  270.       min=MIN(min,daten(i&))
  271.     NEXT i&
  272.     '
  273.   CASE 2 ! 2-dimensionales Array
  274.     '
  275.     spalten&=LPEEK(adresse%)+PRED(base|)
  276.     zeilen&=LPEEK(adresse%+4)+PRED(base|)
  277.     FOR i&=base| TO zeilen&
  278.       FOR j&=base| TO spalten&
  279.         max=MAX(max,daten(i&,j&))
  280.         min=MIN(min,daten(i&,j&))
  281.       NEXT j&
  282.     NEXT i&
  283.     '
  284.   ENDSELECT
  285. RETURN
  286. > PROCEDURE balken(sy,br&,ho,ti&)
  287.   b_x&=DRAW(0)
  288.   b_y&=DRAW(1)
  289.   '
  290.   f_x%(0)=DRAW(0)
  291.   f_y%(0)=DRAW(1)
  292.   DRAW "pu sy",sy,"tt 0 fd",ho
  293.   f_x%(1)=DRAW(0)
  294.   f_y%(1)=DRAW(1)
  295.   IF ho>0
  296.     DRAW "sy 0 tt",winkel|,"fd",ti&
  297.     f_x%(2)=DRAW(0)
  298.     f_y%(2)=DRAW(1)
  299.     DRAW "tt",winkel|+knick|,"fd",br&
  300.     f_x%(3)=DRAW(0)
  301.     f_y%(3)=DRAW(1)
  302.     DRAW "sy",sy,"tt 180 fd",ho
  303.     f_x%(4)=DRAW(0)
  304.     f_y%(4)=DRAW(1)
  305.     DRAW "sy 0 tt",winkel|+180,"fd",ti&
  306.   ELSE
  307.     DRAW "sy 0 tt",winkel|+knick|,"fd",br&
  308.     f_x%(2)=DRAW(0)
  309.     f_y%(2)=DRAW(1)
  310.     DRAW "tt",winkel|,"fd",ti&
  311.     f_x%(3)=DRAW(0)
  312.     f_y%(3)=DRAW(1)
  313.     DRAW "sy",sy,"tt 180 fd",ho
  314.     f_x%(4)=DRAW(0)
  315.     f_y%(4)=DRAW(1)
  316.     DRAW "sy 0 tt",winkel|+180+knick|,0,"fd",br&
  317.   ENDIF
  318.   f_x%(5)=DRAW(0)
  319.   f_y%(5)=DRAW(1)
  320.   POLYFILL 6,f_x%(),f_y%()
  321.   DRAW "sy0 ma",b_x&,b_y&
  322.   DRAW "pd co 0"
  323.   DRAW "sy",sy
  324.   DRAW "tt 0 fd",ho
  325.   DRAW "sy0 tt",winkel|+knick|,"fd",br&
  326.   DRAW "sy",sy,"tt 180 fd",ho
  327.   DRAW "sy0 tt",winkel|+180+knick|,"fd",br&
  328.   IF ho>0
  329.     DRAW "sy",sy,"tt 0 fd",ho
  330.   ENDIF
  331.   DRAW "sy0 tt",winkel|,"fd",ti&
  332.   DRAW "tt",winkel|+knick|,"fd",br&
  333.   DRAW "tt",winkel|+180,"fd",ti&
  334.   DRAW "sy",sy,"tt 180 fd",ABS(ho)
  335.   DRAW "sy0 tt",winkel|,"fd",ti&
  336.   DRAW "sy",sy,"tt 0 fd",ABS(ho)
  337.   '
  338.   DRAW "sy0 ma",b_x&,b_y&
  339. RETURN
  340. > PROCEDURE farbe(x|)
  341.   DEFFILL x|,1
  342.   INC p|
  343.   PBOX 620,p|*10+10,630,p|*10+20
  344. RETURN
  345. '
  346. > PROCEDURE auswahl_box(menge_soll|,n|,VAR wahl$(),a!())
  347.   DIM a!(n|)
  348.   ARRAYFILL a!(),TRUE
  349.   ok!=FALSE
  350.   revers!=FALSE
  351.   markiert!=TRUE
  352.   ende!=FALSE
  353.   menge_ist|=0
  354.   DEFFILL 1
  355.   ma|=LEN(wahl$(1))
  356.   FOR i|=2 TO n|
  357.     ma|=MAX(ma|,LEN(wahl$(i|)))
  358.   NEXT i|
  359.   '
  360.   IF n|>10
  361.     l|=120
  362.   ELSE
  363.     l|=(n|*12)
  364.   ENDIF
  365.   b&=SUCC(INT(MAX((ma|*8)+30,156)/10))*10
  366.   x&=320-b&/2
  367.   y|=110-l|/2
  368.   GET x&,y|,x&+b&+1,y|+l|+37,hintergrund$
  369.   COLOR 0
  370.   PBOX x&,y|,x&+b&,y|+l|+36
  371.   COLOR 1
  372.   INC x&
  373.   INC y|
  374.   BOX x&,y|,x&+b&,y|+12
  375.   TEXT x&+b&/2-68,y|+9,"Bitte Wählen Sie!"
  376.   BOX x&,y|+12,x&+b&,y|+23
  377.   IF n|>10
  378.     FOR p&=x&+1 TO x&+b& STEP 10
  379.       LINE p&+1,y|+18,p&+5,y|+14
  380.       LINE p&+5,y|+14,p&+9,y|+18
  381.       LINE p&+2,y|+17,p&+2,y|+21
  382.       LINE p&+2,y|+21,p&+8,y|+21
  383.       LINE p&+8,y|+21,p&+8,y|+17
  384.     NEXT p&
  385.   ELSE
  386.     DEFFILL ,3
  387.     FILL x&+3,y|+15
  388.   ENDIF
  389.   BOX x&,y|+23,x&+b&,y|+23+l|
  390.   BOX x&,y|+23+l|,x&+b&,y|+34+l|
  391.   IF n|>10
  392.     FOR p&=x&+1 TO x&+b& STEP 10
  393.       LINE p&+1,y|+l|+5+23,p&+5,y|+l|+9+23
  394.       LINE p&+5,y|+l|+9+23,p&+9,y|+l|+5+23
  395.       LINE p&+2,y|+l|+1+23,p&+2,y|+l|+5+23
  396.       LINE p&+2,y|+l|+1+23,p&+8,y|+l|+1+23
  397.       LINE p&+8,y|+l|+1+23,p&+8,y|+l|+5+23
  398.     NEXT p&
  399.   ELSE
  400.     DEFFILL ,3
  401.     FILL x&+3,y|+25+l|
  402.   ENDIF
  403.   LINE x&+15,y|+23,x&+15,y|+23+l|
  404.   FOR i|=0 TO MIN(n|-1,9)
  405.     TEXT x&+3,y|+31+i|*12,i|
  406.   NEXT i|
  407.   DEC x&
  408.   DEC y|
  409.   BOX x&,y|,x&+b&,y|+l|+36
  410.   FOR l&=y|+23 TO y|+23+l| STEP 12
  411.     LINE x&,l&,x&+b&,l&
  412.   NEXT l&
  413.   FOR i|=1 TO MIN(n|,10)
  414.     TEXT x&+b&/2-(LEN(wahl$(i|))*8)/2,y|+20+i|*12,wahl$(i|)
  415.   NEXT i|
  416.   erster|=1
  417.   li&=x&+b&
  418.   l1|=y|+12
  419.   l2|=l1|+11
  420.   l3|=l2|+l|
  421.   l4|=l3|+11
  422.   REPEAT
  423.     taste$=INKEY$
  424.     IF taste$<>""
  425.       IF LEN(taste$)=1
  426.         taste&=ASC(taste$)
  427.       ELSE
  428.         taste&=ASC(RIGHT$(taste$))
  429.       ENDIF
  430.       SELECT taste&
  431.       CASE 65
  432.         IF erster|<n|-9
  433.           sel_rev(10)
  434.           sel_scr(1)
  435.         ENDIF
  436.       CASE 66
  437.         IF erster|>1
  438.           sel_rev(10)
  439.           sel_scr(0)
  440.         ENDIF
  441.       CASE 48 TO 57
  442.         SUB taste&,48
  443.         IF taste&<n|
  444.           IF a!(erster|+taste&)=TRUE
  445.             a!(erster|+taste&)=FALSE
  446.             INC menge_ist|
  447.             COLOR 1
  448.             LINE x&+b&-10,y|+30+taste&*12,x&+b&-7,y|+33+taste&*12
  449.             LINE x&+b&-7,y|+33+taste&*12,x&+b&-3,y|+25+taste&*12
  450.           ELSE
  451.             a!(erster|+taste&)=TRUE
  452.             DEC menge_ist|
  453.             COLOR 0
  454.             LINE x&+b&-10,y|+30+taste&*12,x&+b&-7,y|+33+taste&*12
  455.             LINE x&+b&-7,y|+33+taste&*12,x&+b&-3,y|+25+taste&*12
  456.           ENDIF
  457.         ENDIF
  458.       CASE 13
  459.         ende!=TRUE
  460.       ENDSELECT
  461.       taste$=""
  462.     ENDIF
  463.     IF MOUSEX>x& AND MOUSEX<li& AND MOUSEY>l2| AND MOUSEY<l3| AND MOUSEK<>2
  464.       '                           Mauszeiger im Auswahlfeld
  465.       eintrag|=MAX(0,(MOUSEY-y|-24)/12)
  466.       sel_rev(eintrag|)
  467.       IF MOUSEK=1 AND ok!=FALSE
  468.         IF a!(erster|+eintrag|)=TRUE
  469.           a!(erster|+eintrag|)=FALSE
  470.           INC menge_ist|
  471.           COLOR 1
  472.           LINE x&+b&-10,y|+30+eintrag|*12,x&+b&-7,y|+33+eintrag|*12
  473.           LINE x&+b&-7,y|+33+eintrag|*12,x&+b&-3,y|+25+eintrag|*12
  474.         ELSE
  475.           a!(erster|+eintrag|)=TRUE
  476.           DEC menge_ist|
  477.           COLOR 3
  478.           LINE x&+b&-10,y|+30+eintrag|*12,x&+b&-7,y|+33+eintrag|*12
  479.           LINE x&+b&-7,y|+33+eintrag|*12,x&+b&-3,y|+25+eintrag|*12
  480.         ENDIF
  481.       ENDIF
  482.       ok!=MOUSEK
  483.     ELSE
  484.       sel_rev(10)
  485.     ENDIF
  486.     IF MOUSEX>x& AND MOUSEX<li& AND MOUSEY>l1| AND MOUSEY<l2| AND MOUSEK=1 AND erster|<n|-9
  487.       '                           Mauszeiger im oberen Scrollfeld
  488.       sel_scr(1)
  489.     ELSE IF MOUSEX>x& AND MOUSEX<li& AND MOUSEY>l3| AND MOUSEY<l4| AND MOUSEK=1 AND erster|>1
  490.       '                           Mauszeiger im unteren Scrollfeld
  491.       sel_scr(0)
  492.     ENDIF
  493.   UNTIL MOUSEK=2 OR ende!=TRUE OR menge_soll|=menge_ist|
  494.   PUT x&,y|,hintergrund$
  495. RETURN
  496. > PROCEDURE sel_rev(nummer|)
  497.   IF revers!=TRUE AND revers|<>nummer|        !Revers off
  498.     GET x&+19,y|+25+revers|*12,x&+b&-3,y|+33+revers|*12,revers$
  499.     PUT x&+19,y|+25+revers|*12,revers$,30
  500.     revers!=FALSE
  501.   ELSE IF revers!=FALSE AND nummer|<10        !Revers on
  502.     GET x&+19,y|+25+nummer|*12,x&+b&-3,y|+33+nummer|*12,revers$
  503.     PUT x&+19,y|+25+nummer|*12,revers$,30
  504.     revers!=TRUE
  505.     revers|=nummer|
  506.   ENDIF
  507. RETURN
  508. > PROCEDURE sel_scr(richtung|)
  509.   IF richtung|
  510.     INC erster|
  511.   ELSE
  512.     DEC erster|
  513.   ENDIF
  514.   GET x&+17,y|+25+richtung|*12,x&+b&-1,y|+10+l|+richtung|*12,teil$
  515.   PUT x&+17,y|+37-richtung|*12,teil$
  516.   DEFFILL 0
  517.   PBOX x&+18,y|+25+richtung|*108,x&+b&-1,y|+34+richtung|*108
  518.   DEFFILL 1
  519.   TEXT x&+5+b&/2-(LEN(wahl$(erster|+richtung|*9))*8)/2,y|+32+richtung|*108,wahl$(erster|+richtung|*9)
  520.   IF a!(erster|+richtung|*9)=FALSE
  521.     COLOR 1
  522.     LINE x&+b&-10,y|+30+richtung|*108,x&+b&-7,y|+33+richtung|*108
  523.     LINE x&+b&-7,y|+33+richtung|*108,x&+b&-3,y|+25+richtung|*108
  524.   ENDIF
  525. RETURN
  526.